freeslot("sfx_dumbex")
addHook("PlayerThink", function(player)
	local mo = player.mo
	if not mo then return end
	
	//Dying to kart explosion
	if not player.playerstate
		if mo.subsector and mo.subsector.sector
		and mo.subsector.sector.floorpic == "DCZFLR13"
			local dust
			local truc
			local speed, speed2
			
			local radius = mo.info.radius>>FRACBITS
			local height = mo.info.height>>FRACBITS
			local color = SKINCOLOR_KETCHUP
			
			local smoldering = P_SpawnMobjFromMobj(mo, 0,0,0, MT_SMOKE)
			smoldering.tics = TICRATE*3
			
			S_StartSound(smoldering, sfx_dumbex)
			if player == displayplayer or player == secondarydisplayplayer
				P_StartQuake(64*mo.scale, TICRATE)
			end

			for i = 0, 31
				dust = P_SpawnMobj(mo.x, mo.y, mo.z, MT_SMOKE)
				dust.angle = (ANGLE_180/16) * i
				P_SetScale(dust, mo.scale)
				dust.destscale = mo.scale*10
				dust.scalespeed = mo.scale/12
				P_InstaThrust(dust, dust.angle, FixedMul(20*FRACUNIT, mo.scale))

				truc = P_SpawnMobjFromMobj(mo, P_RandomRange(-radius, radius)*FRACUNIT,
					P_RandomRange(-radius, radius)*FRACUNIT,
					P_RandomRange(0, height)*FRACUNIT, MT_BOSSEXPLODE)
				P_SetScale(truc, mo.scale)
				truc.destscale = mo.scale*6
				truc.scalespeed = mo.scale/12
				speed = FixedMul(10*FRACUNIT, mo.scale)>>FRACBITS
				truc.momx = P_RandomRange(-speed, speed)*FRACUNIT
				truc.momy = P_RandomRange(-speed, speed)*FRACUNIT
				speed = FixedMul(20*FRACUNIT, mo.scale)>>FRACBITS
				truc.momz = P_RandomRange(-speed, speed)*FRACUNIT*P_MobjFlip(truc)
				if (truc.eflags & MFE_UNDERWATER)
					truc.momz = (117 * truc.momz) / 200
				end
				truc.color = color
			end

			for i = 0, 15
				dust = P_SpawnMobjFromMobj(mo, P_RandomRange(-radius, radius)*FRACUNIT,
					P_RandomRange(-radius, radius)*FRACUNIT,
					P_RandomRange(0, height)*FRACUNIT, MT_SMOKE)
				P_SetScale(dust, mo.scale)
				dust.destscale = mo.scale*10
				dust.scalespeed = mo.scale/12
				dust.tics = 30
				dust.momz = P_RandomRange(FixedMul(3*FRACUNIT, mo.scale)>>FRACBITS, FixedMul(7*FRACUNIT, mo.scale)>>FRACBITS)*FRACUNIT

				truc = P_SpawnMobjFromMobj(mo, P_RandomRange(-radius, radius)*FRACUNIT,
					P_RandomRange(-radius, radius)*FRACUNIT,
					P_RandomRange(0, height)*FRACUNIT, MT_BOSSEXPLODE)
				P_SetScale(truc, mo.scale)
				truc.destscale = mo.scale*5
				truc.scalespeed = mo.scale/12
				speed = FixedMul(20*FRACUNIT, mo.scale)>>FRACBITS
				truc.momx = P_RandomRange(-speed, speed)*FRACUNIT
				truc.momy = P_RandomRange(-speed, speed)*FRACUNIT
				speed = FixedMul(15*FRACUNIT, mo.scale)>>FRACBITS
				speed2 = FixedMul(45*FRACUNIT, mo.scale)>>FRACBITS
				truc.momz = P_RandomRange(speed, speed2)*FRACUNIT*P_MobjFlip(truc)
				if (P_RandomChance(FRACUNIT/2))
					truc.momz = -truc.momz
				end
				if (truc.eflags & MFE_UNDERWATER)
					truc.momz = (117 * truc.momz) / 200
				end
				truc.tics = TICRATE*2
				truc.color = color
			end
			
			P_DamageMobj(mo, nil, nil, 1, DMG_INSTAKILL)
			mo.z = $ + P_MobjFlip(mo)
			P_InstaThrust(mo, mo.angle, speed*mo.scale*2)
			mo.momz = speed2*mo.scale*P_MobjFlip(mo)/2
			mo.flags = $ | MF_BOUNCE | MF_GRENADEBOUNCE &~ MF_NOCLIPHEIGHT
			mo.dumbdeath = true
		end
	elseif mo.dumbdeath
		mo.rollangle = $ + ANG20*4
		if P_IsObjectOnGround(mo)
			mo.momz = 48*mo.scale
		end
	end
end)